xyz = 'cycy'
a = b =c =xyz

print(xyz)
print(a)
print(b)
print(c)

i,j,k,l=1, 2.0,c,False

print(i)
print(j)
print(k)

'''
标准数组类型
    不可变
        Number
        String
        Tuple
    可变
        List
        Set
        Dictionary
'''
# <class 'str'> <class 'int'> <class 'float'> <class 'str'> <class 'bool'>
print(type(xyz),\
       type(i), \
      type(j),\
      type(k),\
      type(l)\
      )
# TypeError: isinstance() arg 2 must be a type, a tuple of types, or a union
# int=2 
print(isinstance(i, int))
# True
#    print(isinstance(i, Number))
#                        ^^^^^^
# NameError: name 'Number' is not defined
# print(isinstance(i, Number))

print(issubclass(bool, int))

var1 = 1; var2 = var1; var3 = 2
print(var1, var2, var3)

del var1, var3
# NameError: name 'var1' is not defined. Did you mean: 'var2'?
# print(var1, var2, var3)
print(var2)

# 5 + 4 =  9
print('5 + 4 = ', 5 + 4)
# 4.3 - 2 =  2.3
print('4.3 - 2 = ', 4.3 - 2)
# 3 * 7 =  21
print('3 * 7 = ', 3 * 7)
# 2 / 4 =  0.5
print('2 / 4 = ', 2 / 4)
# 2 // 4 =  0
print('2 // 4 = ', 2 // 4)
# 17 % 3 =  2
print('17 % 3 = ', 17 % 3)
# 2 ** 5 =  32
print('2 ** 5 = ', 2 ** 5)

# 一个变量可以通过赋值改变自身的数据类型
# 混合计算时，整型 -> 浮点

# py string不可变，string[idx]='x' 报错

# bool 与 其他数据类型比较时，True == 1, False == 0 

# ------------

# 变量 持有 对象的引用(内存空间的指针)
# 对象的内存空间 = 数据类型 + 被引用的次数（0表示，可以被回收， 比如使用del）
# 常驻内存：常用的对象会提前创建好，不会反复分配内存（比如 一些常用的数字）

# 类型类型 即 类
# 就像 type()函数 返回的一样 <class xxx>

# 更多的推导case
# 没错，字符串的 显式转换函数是 str()
p = {i:str(i) for i in range(1,5)}
print("p:",p)
'''
p: {1: '1', 2: '2', 3: '3', 4: '4'}
'''

x = ['A','B','C','D']
y = ['a','b','c','d']
n = {i:j for i,j in zip(x,y)}
print("n:",n)
'''
n: {'A': 'a', 'B': 'b', 'C': 'c', 'D': 'd'}
'''

s = {x:x.strip() for x in ('he','she','I')}
print("s:",s)
'''
s: {'he': 'he', 'she': 'she', 'I': 'I'}
'''

# 函数存在多个返回时，可以借助元组的形式
def aFn(a, b):
    return (a, b)

print(type(aFn(1, 2))) # <class 'tuple'>

# 函数入参可变的情况，将以元组的形式收集
def bFn(*args):
    print(args)
    return args

print(type(bFn(1, 2, 3)))
# (1, 2, 3)
# <class 'tuple'>

# 逗号替代分号，不会报错，意外创建出元组
# https://blog.csdn.net/linuxZhuxiaodi/article/details/90313336

# 分号，仅用于 单行有多行命令的情况
# 并非命令的结束符号
# https://zhuanlan.zhihu.com/p/150202663

# bool 作为 Number，可以参与运算
print( True + 1 )   # 2
print( False + 1 )  # 1

# 声明 解释器 所在
# #!/usr/bin/python3 
# 在windows下使用，常配置环境变量，这个不需要

# 推荐写法
# #!/usr/bin/env python3
# 在环境变量下找

# python xxx.py
# #!xxx/python 将作为注释，不执行
# ./xxx.py 则会执行

# ipython 是 增强的 交互式shell
# 也是一种解释器
# 官方使用 CPython